package models

import (
	"encoding/json"
	"gorm.io/gorm"
)

// Machines 机器信息表（含系统、硬件、运行状态）
type Machines struct {
	gorm.Model // 包含 ID, CreatedAt, UpdatedAt, DeletedAt（GORM 默认字段）

	// 核心标识字段
	MachineIP string `gorm:"type:varchar(39);unique;not null;comment:机器IP地址(支持IPv6)" `
	Hostname  string `gorm:"type:varchar(255);not null;comment:主机名" `

	// 系统信息
	OSName        string `gorm:"type:varchar(255);comment:操作系统名称(如Kylin Linux、CentOS)" `
	KernelVersion string `gorm:"type:varchar(100);comment:内核版本(如4.19.90-24.4.v2101)"`
	Arch          string `gorm:"type:varchar(20);comment:系统架构(如x86_64、arm64)" `
	Uptime        string `gorm:"type:varchar(50);comment:系统运行时间(如2h47m33s)"`

	// CPU 信息
	CPUName  string `gorm:"type:varchar(255);comment:CPU型号(如Intel Xeon E5-2670)" `
	CPUCores int    `gorm:"comment:CPU总核心数" `

	// 内存信息
	MemoryTotal int `gorm:"comment:总内存(MB)"`
	MemoryFree  int `gorm:"comment:空闲内存(MB)" `

	// 磁盘信息（JSON数组，存储多个磁盘的device/type/total_gb）
	Disks  json.RawMessage `gorm:"type:json;comment:磁盘列表(如[{device: 'sda', type: 'hdd', total_gb: 1000}])" `
	Status int             `gorm:"type:int;default:0;index;comment:机器状态(0-离线,1-在线)"`
}

type MachineRole struct {
	gorm.Model        // 包含 ID, CreatedAt, UpdatedAt, DeletedAt（GORM 默认字段）
	Name       string `gorm:"type:varchar(50);unique;not null;comment:机器角色名" `
	Machines   Machines
}
